set_property(GLOBAL PROPERTY USE_FOLDERS YES)

# Call this function at the end of a directory scope to assign a folder to
# targets created in that directory. Utility targets will be assigned to the
# UtilityTargets folder, otherwise to the ${name}Targets folder. If a target
# already has a folder assigned, then that target will be skipped.
function(add_folders name)
    get_property(targets DIRECTORY PROPERTY BUILDSYSTEM_TARGETS)
    foreach (target IN LISTS targets)
        get_property(folder TARGET "${target}" PROPERTY FOLDER)
        if (DEFINED folder)
            continue()
        endif ()
        set(folder Utility)
        get_property(type TARGET "${target}" PROPERTY TYPE)
        if (NOT type STREQUAL "UTILITY")
            set(folder "${name}")
        endif ()
        set_property(TARGET "${target}" PROPERTY FOLDER "${folder}Targets")
    endforeach ()
endfunction()
